 // 请求基础配置
// 开发环境：使用localhost（开发工具中可用）
// 生产环境：替换为实际的服务器域名
// const BASE_URL = 'http://81.70.187.105:8888/api';
const BASE_URL = 'https://wechat.xzblu.cn/api';
// const BASE_URL = 'http://localhost:8888/api'; // 本地开发时使用

// 防止重复跳转登录页面的标志
let isRedirectingToLogin = false;

/**
 * 处理token过期，统一跳转到登录页面
 * @param {string} message 错误信息
 */
const handleTokenExpired = (message = 'Token已过期，请重新登录') => {
  // 防止重复跳转
  if (isRedirectingToLogin) {
    return;
  }
  
  isRedirectingToLogin = true;
  
  try {
    // 清除本地存储的用户信息
    wx.removeStorageSync('token');
    wx.removeStorageSync('userInfo');
    
    // 显示提示信息
    wx.showToast({
      title: message,
      icon: 'none',
      duration: 2000
    });
    
    // 延迟跳转，让用户看到提示信息
    setTimeout(() => {
      wx.reLaunch({
        url: '/pages/login/login',
        success: () => {
          // 重置跳转标志，以便下次能正常跳转
          setTimeout(() => {
            isRedirectingToLogin = false;
          }, 1000);
        },
        fail: (err) => {

          // 重置跳转标志
          isRedirectingToLogin = false;
          
          // 尝试使用 navigateTo 作为备选方案
          wx.navigateTo({
            url: '/pages/login/login',
            success: () => {
            },
            fail: (navErr) => {

              // 最后的备选方案：显示模态框让用户手动操作
              wx.showModal({
                title: 'Token已过期',
                content: '请手动返回登录页面重新登录',
                showCancel: false,
                confirmText: '确定'
              });
            }
          });
        }
      });
    }, 500);
    
  } catch (error) {

    isRedirectingToLogin = false;
  }
};

// 请求封装
const request = (options) => {
  return new Promise((resolve, reject) => {
    // 获取存储的token
    const token = wx.getStorageSync('token');
    
    // Token调试信息


    
    // 构建完整URL
    const fullUrl = options.url.startsWith('http') 
      ? options.url 
      : BASE_URL + options.url;
    
    // 构建header
    const header = {
      'Content-Type': 'application/json',
      ...options.header
    };
    
    // 添加token（如果存在）
    if (token) {
      header.token = token;
    }
    
    // 默认配置
    const defaultOptions = {
      url: fullUrl,
      method: options.method || 'GET',
      header,
      timeout: 10000,
      data: options.data,
      dataType: options.dataType || 'json'
    };


    wx.request({
      ...defaultOptions,
      success: (res) => {
        
        const { statusCode, data } = res;
        
        // HTTP状态码检查
        if (statusCode >= 200 && statusCode < 300) {
          // 业务状态码检查
          if (data.code === 200) {
            resolve(data);
          } else {
            // 业务错误
            const errorMsg = data.message || '请求失败';

            
            // 特殊错误码处理 - Token过期或无权限
            if (data.code === 401 || data.code === 403 || data.code === 1001 || 
                data.message.includes('token') || data.message.includes('Token') ||
                data.message.includes('登录') || data.message.includes('身份验证')) {
              // 使用统一的token过期处理函数
              handleTokenExpired(data.message || 'Token已过期，请重新登录');
              return; // 直接返回，不再向下执行reject
            }
            
            reject({
              code: data.code,
              message: errorMsg,
              data: data.data
            });
          }
        } else {
          // HTTP错误处理
          let errorMsg = `网络错误 ${statusCode}`;
          
          errorMsg = `网络错误: ${statusCode}`;

          
          reject({
            code: statusCode,
            message: errorMsg,
            statusCode: statusCode
          });
        }
      },
      fail: (err) => {

        let errorMsg = '网络连接失败';
        
        if (err.errno === 600003) {
          errorMsg = '网络超时，请检查网络连接';
        } else if (err.errno === 600009) {
          errorMsg = '请求超时';
        } else if (err.errMsg.includes('timeout')) {
          errorMsg = '请求超时';
        } else if (err.errMsg.includes('fail')) {
          errorMsg = '网络连接失败，请检查网络';
        }
        
        reject({
          code: -1,
          message: errorMsg,
          originalError: err
        });
      }
    });
  });
};

// GET请求
const get = (url, params = {}, options = {}) => {
  const queryString = Object.keys(params)
    .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(params[key])}`)
    .join('&');
  
  const fullUrl = queryString ? `${url}?${queryString}` : url;
  
  return request({
    url: fullUrl,
    method: 'GET',
    ...options
  });
};

// POST请求
const post = (url, data = {}, options = {}) => {
  return request({
    url,
    method: 'POST',
    data,
    ...options
  });
};

// PUT请求
const put = (url, data = {}, options = {}) => {
  return request({
    url,
    method: 'PUT',
    data,
    ...options
  });
};

// DELETE请求
const deleteRequest = (url, options = {}) => {
  return request({
    url,
    method: 'DELETE',
    ...options
  });
};

module.exports = {
  request,
  get,
  post,
  put,
  delete: deleteRequest,
  BASE_URL,
  handleTokenExpired
};